# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:docx_keywords2_0.py
@Time:2024/8/28 19:45

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""

from docx import Document
import os
import re

def is_docx_empty(docx_path):
    """
    判断docx文件是否有内容
    :param docx_path: docx文件的路径
    :return: 如果文件为空返回True，否则返回False
    """
    try:
        doc = Document(docx_path)
        # 遍历文档中的所有段落
        for para in doc.paragraphs:
            # 如果存在非空段落，则认为文件非空
            if para.text.strip():
                return False
        # 还可以检查表格、页眉页脚等是否有内容，这里只作为段落检查示例
        return True
    except Exception as e:
        # 处理文件读取或其他异常
        print(f"处理文件时发生错误: {e}")
        return True  # 或者你可以根据需要抛出异常或返回False


def search_and_extract_paragraphs(folder_path, keywords, output_docx):
    # 创建一个新的Word文档用于写入结果
    doc = Document()

    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        if filename.endswith('.docx'):
            file_path = os.path.join(folder_path, filename)
            # 读取Word文件
            doc_to_read = Document(file_path)
            # 遍历文档中的所有段落
            for para in doc_to_read.paragraphs:
                # 检查段落文本是否包含任何关键字
                if any(keyword in para.text for keyword in keywords):
                    # 如果段落包含关键字之一，则添加到新文档中，并在前面添加文件名
                    # new_para = doc.add_paragraph(f"文件: {filename}\n{para.text}")
                    doc.add_paragraph(f"文件: {filename}\n{para.text}")

    # 保存新文档
    doc.save(output_docx)
    if is_docx_empty(output_docx):
        os.remove(output_docx)
        print("文件为空,删除")
    else:
        print(f'{output_docx}文件已保存')


def join_with_underscore(items):
    # 使用join()方法拼接列表项，但首先需要将列表项转换为字符串
    # 如果列表为空，则直接返回空字符串
    if not items:
        return ""
    # 使用下划线作为分隔符来拼接列表项
    return "_".join(map(str, items))


# 使用示例
folder_path = '全国统计公报/'  # 替换为你的Word文件所在的文件夹路径

delimiter_pattern = re.compile(r'[，,、\s]+')

# 获取用户输入的字符串
user_input = input("请输入不多于四个变量，可用中文逗号、英文逗号、顿号或空格分隔: ")

# 使用正则表达式分割字符串
variables_list = delimiter_pattern.split(user_input)

# 去除列表中的空字符串（如果用户在分隔符之间没有输入任何内容）
variables_list = [var for var in variables_list if var]

# 假设我们只关心前三个变量（如果用户输入了更多，我们可以选择忽略）
# 注意：如果输入少于三个变量，列表将只包含实际输入的变量
if len(variables_list) > 4:
    variables_list = variables_list[:4]  # 只取前三个

keywords = variables_list
# keywords = ['国内生产总值', '增加值']  # 指定要搜索的关键字列表
output_docx = 'output_gongbao/output_with_'+join_with_underscore(keywords)+'.docx'  # 输出文件的名称

# 调用函数
search_and_extract_paragraphs(folder_path, keywords, output_docx)